package juc.scenarios.startup.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 服务检查结果
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServiceCheckResult {

    /**
     * 检查ID
     */
    private String checkId;

    /**
     * 总服务数量
     */
    private int totalServices;

    /**
     * 健康服务数量
     */
    private int healthyServices;

    /**
     * 不健康服务数量
     */
    private int unhealthyServices;

    /**
     * 检查开始时间
     */
    private LocalDateTime startTime;

    /**
     * 检查结束时间
     */
    private LocalDateTime endTime;

    /**
     * 总耗时（毫秒）
     */
    private Long totalDuration;

    /**
     * 各个服务的状态详情
     */
    private Map<String, ServiceStatus> serviceStatusMap;

    /**
     * 是否所有服务都健康
     */
    public boolean isAllHealthy() {
        return healthyServices == totalServices && unhealthyServices == 0;
    }

    /**
     * 获取健康的服务列表
     */
    public List<String> getHealthyServiceNames() {
        return serviceStatusMap.entrySet().stream()
                .filter(entry -> entry.getValue().getState() == ServiceStatus.ServiceState.HEALTHY)
                .map(Map.Entry::getKey)
                .toList();
    }

    /**
     * 获取不健康的服务列表
     */
    public List<String> getUnhealthyServiceNames() {
        return serviceStatusMap.entrySet().stream()
                .filter(entry -> entry.getValue().getState() == ServiceStatus.ServiceState.UNHEALTHY)
                .map(Map.Entry::getKey)
                .toList();
    }
}